﻿
package com.example.videooncarmera;

import java.io.File;
import java.io.FileOutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.dreamfish.record.AudioRecorder;
import com.dreamfish.record.FileUtil;

import sc.tool.audio.AudioTool;
import sc.tool.audio.AudioTool.AudioPlayer;
import sc.tool.audio.AudioTool.CallBack_bytes;
import sc.tool.video.CameraSurfaceView;
import sc.tool.video.CameraSurfaceView.CallBack_Bitmap;
import android.app.Activity;
import android.graphics.Bitmap;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;


public class MainActivity1 extends Activity
{
	CameraSurfaceView surView;
	ImageView preImage;
	
	RelativeLayout surfaceviewlayout;
	
	Button button_Record;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		preImage = (ImageView) this.findViewById(R.id.imageView_pre);
		
		surView = new CameraSurfaceView(this, new CallBack_Bitmap()
		{
			@Override
			public void F(Bitmap pic)
			{
				preImage.setImageBitmap(pic);
			}
		});
		
		surfaceviewlayout = (RelativeLayout) this.findViewById(R.id.surfaceviewlayout);
		surfaceviewlayout.addView(surView);
		//		surView.setVisibility(View.INVISIBLE);
		
		button_Record = (Button) this.findViewById(R.id.button_Record);
		button_Record.setOnTouchListener(new OnTouchListener()
		{
			final CallBack_bytes call = new CallBack_bytes()
			{
				AudioPlayer audioPlayer = new AudioPlayer();	// 创建AudioPlayer用于音频播放，此处仅演示本地播放
				
				@Override
				public void F(byte[] data)
				{
					audioPlayer.Play(data);	// 对实时获取的音频，进行实时播放
					
					// 1、一般是将data实时传输至服务器端，由服务器转发至远程客户端；
					// 2、在远程客户端，用audioPlayer播放实时音频。
				}
			};
			
			@Override
			public boolean onTouch(View arg0, MotionEvent event)
			{
				if(event.getAction() == MotionEvent.ACTION_UP)
				{
					AudioTool.RecodingStop();
				} 
				
				if(event.getAction() == MotionEvent.ACTION_DOWN)
				{
					// 启动音频实时录制
					AudioTool.RecordingStart(call);
				}
				
				return false;
			}
		});
	}
	
//	public void ScreeShot(View view)
//	{
//		surView.TakePhoto(new CallBack_Bitmap()
//		{
//			@Override
//			public void F(Bitmap pic)
//			{
//				SaveScreen(pic);
//			}
//		});
//		Toast.makeText(this, "已拍照！", Toast.LENGTH_SHORT).show();
//	}
	
	boolean RealTimeAudio_IsStart = false;
	
	public void RealTimeAudio(View view)
	{
//		TestLogic();
//		TestLogic2();
		
//				if(!RealTimeAudio_IsStart)
//				{
//					RealTimeAudio_IsStart = true;
//					
//					AudioTool.Example();		// 启动本地实时音频示例
//					Toast.makeText(this, "实时音频示例已启动！", Toast.LENGTH_SHORT).show();
//				}
//				else
//				{
//					RealTimeAudio_IsStart = false;
//					AudioTool.RecodingStop();	// 停止本地实时音频录制
//				}
	}
	
//
//	private void TestLogic2()
//	{
//		
//		try
//		{
//			AudioRecorder audioRecorder = AudioRecorder.getInstance();
//			if (!RealTimeAudio_IsStart && audioRecorder.getStatus() == AudioRecorder.Status.STATUS_NO_READY)
//			{
//				
//				RealTimeAudio_IsStart = true;
//				
//				//初始化录音
//				String fileName = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
//				audioRecorder.createDefaultAudio(fileName);
//				audioRecorder.startRecord(null);
//				
//				//                start.setText("停止录音");
//				
//				//                pause.setVisibility(View.VISIBLE);
//				
//			}
//			else
//			{
//				RealTimeAudio_IsStart = false;
//				
//				//停止录音
//				audioRecorder.stopRecord();
//				//                start.setText("开始录音");
//				//                pause.setText("暂停录音");
//				//                pause.setVisibility(View.GONE);
//			}
//			
//		}
//		catch (IllegalStateException e)
//		{
//			Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
//		}
//	}
//	
//	private void TestLogic()
//	{
//		final String audioPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/RecorderTest/" + System.currentTimeMillis() + ".pcm";
//		
//		new Thread(new Runnable()
//		{
//			@Override
//			public void run()
//			{
//				
//				try
//				{
//					long startTime = System.currentTimeMillis();
//					byte[] mBuffer = new byte[2048];
//					
//					// 1、输出pcm文件
//					File mAudioFile = new File(audioPath);
//					mAudioFile.getParentFile().mkdirs();
//					mAudioFile.createNewFile();
//					
//					FileOutputStream mFileOutputStream = new FileOutputStream(mAudioFile);
//					
//					// 2、配置AudioRecord
//					int audioSource = MediaRecorder.AudioSource.MIC;	// 声音来源
//					int sampleRate = 16000;								// 采样率 Hz
//					int channelConfig = AudioFormat.CHANNEL_IN_MONO;	// 音频通道的配置 MONO 单声道
//					int audioFormat = AudioFormat.ENCODING_PCM_16BIT;	// 返回音频数据的格式 
//					int minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);	//AudioRecord能接受的最小的buffer大小
//					
//					AudioRecord mAudioRecorder = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, Math.max(minBufferSize, 2048));
//					
//					// 3、开始录音
//					mAudioRecorder.startRecording();
//					
//					// 4、一边从AudioRecord中读取声音数据到初始化的buffer，一边将buffer中数据导入数据流，写入文件中
//					while (System.currentTimeMillis() - startTime < 3.5 * 1000)
//					{ // 标志位，是否停止录音
//						int read = mAudioRecorder.read(mBuffer, 0, 2048);
//						if (read > 0)
//						{
//							mFileOutputStream.write(mBuffer, 0, read);
//							// 也可以在这里对音频数据进行处理，压缩、直播等
//						}
//					}
//					
//					// 5、停止录音，释放资源
//					mAudioRecorder.stop();
//					mAudioRecorder.release();
//					mAudioRecorder = null;
//					mFileOutputStream.close();
//					
//					FileUtil.PCMFilesToWAV(audioPath);
//					
//				}
//				catch (Exception e)
//				{
//					e.printStackTrace();
//				}
//			}
//			
//		}).start();
//		Toast.makeText(this, "实时音频已经保存！\r\n" + audioPath, Toast.LENGTH_SHORT).show();
//		
//	}
//	
//	/** 基于Activity的截屏（无需申请权限或root,仅能截取到当前Activity界面） */
//	private static Bitmap View2Bitmap(View view)
//	{
//		view.setDrawingCacheEnabled(true);         			// 启用绘图缓存
//		view.buildDrawingCache();                  			// 强制构建绘图缓存（防止上面启用绘图缓存的操作失败）
//		Bitmap bitmap = view.getDrawingCache();     			// 获取绘图缓存中的 bitmap
//		
//		if (bitmap != null) bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight());	// 创建副本作为返回对象
//			
//		// // 裁切图像，去除状态栏
//		// int newBmpHeight = bitmap.getHeight() - statusBarHeight; // 最终截取的图片的高度（取出状态栏之后的高度）
//		// bitmap = Bitmap.createBitmap(bitmap, 0, statusBarHeight, bitmap.getWidth(), newBmpHeight);
//		// decorView.setDrawingCacheEnabled(false); // createBitmap完成之后一定要置为false，否则短时间内多次截图时内容不会变化！
//		
//		return bitmap;
//	}
//	
//	/** 保存 bitmap，自动生成图像名称 */
//	public boolean SaveScreen(Bitmap pic)
//	{
//		if (pic == null) return false;
//		
//		String picPath = GetDir() + NewName();
//		boolean result = SavePic(pic, picPath);
//		Toast.makeText(this, "截屏已保存" + "\n" + picPath, Toast.LENGTH_SHORT).show();
//		
//		return result;
//	}
//	
//	/** 获取图像保存路径 */
//	public static String GetDir()
//	{
//		String path = "sc/screeenShot/";
//		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))	// 如果SD存储设备可用
//		{
//			path = Environment.getExternalStorageDirectory().getPath() + File.separator + path;
//			File dir = new File(path);
//			if (!dir.exists()) dir.mkdirs();   // 创建目录
//		}
//		return path;
//	}
//	
//	private static int count = 0;
//	private static String preTime = "";
//	
//	/** 生成图像名称 */
//	public static String NewName()
//	{
//		DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
//		String date = formatter.format(new Date());
//		
//		DateFormat formatter2 = new SimpleDateFormat("HH.mm.ss");
//		String time = formatter2.format(new Date());
//		
//		if (!preTime.equals(time))
//		{
//			count = 1;
//			preTime = time;
//		}
//		else count++;
//		
//		String fileName = date + "_" + time + "_" + count + ".png";
//		return fileName;
//	}
//	
//	/** 保存 bitmap到指定的文件路径 */
//	private static boolean SavePic(Bitmap bitmap, String picPath)
//	{
//		boolean saveSuccess = false;
//		if (bitmap != null)
//		{
//			try
//			{
//				File file = new File(picPath);
//				
//				File dir = file.getParentFile();
//				if (!dir.exists()) dir.mkdirs();   			// 创建目录
//				if (!file.exists()) file.createNewFile();	// 创建新的文件
//					
//				FileOutputStream fos = new FileOutputStream(file);
//				saveSuccess = bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);	// 根据指定的格式、质量、输出流 将bitmap保存到本地，并返回是否保存成功
//				fos.flush();
//				fos.close();    // 关闭流防止溢出
//			}
//			catch (Exception ex)
//			{
//				ex.printStackTrace();
//			}
//		}
//		return saveSuccess;
//	}
}
